package com.ddone.demo.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.ddone.demo.vo.TeacherVo;

import java.util.ArrayList;
import java.util.List;

//监听器：泛型 AnalysisEventListener读取一行数据后会自动转为该类型的对象
public class TeacherVoReadListener extends AnalysisEventListener<TeacherVo> {
    private List<TeacherVo> list = new ArrayList<>();
    private int limit = 100;
    //每读取一行数据回调一次
    @Override
    public void invoke(TeacherVo data, AnalysisContext context) {
        //处理读取到数据的业务代码
//        System.out.println(data);
        //保存数据到数据库： 单个保存性能较差，可以使用批量保存
        //为了节省内存占用，批量保存的数据行数需要设置阈值

        //1、保存数据到集合中
        list.add(data);
        //2、判断集合数据条数到达阈值批量保存
        if(list.size()==limit){
            System.out.println("批量保存。。。。。。。");
            //3、清空保存过的集合数据
            list.clear();
        }
    }
    //整个文档解析完毕后回调
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //如果集合中仍有数据 保存到数据库
        if(list.size()>0){
            System.out.println("文档解析完成：保存数据到数据库");
            list.forEach(System.out::println);
            list.clear();
        }
    }
}
